package com.thaiopensource.validate.nvdl;

import org.xml.sax.SAXException;

/**
 * A no result action that rejects any element.
 */
class RejectAction extends NoResultAction
{
  /**
   * Creates a reject action.
   * 
   * @param modeUsage
   *        The mode usage.
   */
  RejectAction (final ModeUsage modeUsage)
  {
    super (modeUsage);
  }

  /**
   * Perform this action on the session state.
   * 
   * @param state
   *        The section state.
   */
  @Override
  void perform (final SectionState state) throws SAXException
  {
    final ModeUsage modeUsage = getModeUsage ();
    state.reject ();
    state.addChildMode (modeUsage, null);
    state.addAttributeValidationModeUsage (modeUsage);
  }

  /**
   * Get a new reject action with a mode usage with the current mode changed.
   * This is useful when we have modes extending other modes as we need to get
   * the actions from the base mode as actions on the new mode.
   */
  @Override
  NoResultAction changeCurrentMode (final Mode mode)
  {
    return new RejectAction (getModeUsage ().changeCurrentMode (mode));
  }
}
